import axios from "axios"
import { ElMessageBox } from 'element-plus'
import router from "@/router"
import NProgress from 'nprogress'
let http = axios.create({
    baseURL: "/api",//基础地址
    timeout: 1000 * 10,//超时设置
    withCredentials: true//是否携带凭据
})

//配置拦截器

//请求拦截器，所有的axios请求都会被拦截器拦截，可以通过拦截器添加额外的配置
http.interceptors.request.use(config => {
    //新获取token
    NProgress.start()
    let token = sessionStorage.getItem('my-token')
    config.headers.authorization = token
    return config
})


//响应拦截器，所有的axios请求都会被响应拦截器拦截，可以对拦截器的响应进行额外的配置
http.interceptors.response.use(config => {
    NProgress.done()
    //config是每个请求响应的结果，所有的请求返回的结果都需要经过这个门，才能到组件那
    // console.log(config, '响应拦截器');
    if (config.data.state) {
        //响应正常
        return config
    } else {
        //不需要弹窗提示的路径
        let excludePaths = ["/sms/send", "/order/query_order_status"]
        //如果excludePaths中不包含当前的响应路径，那么不需要弹窗
        if (!excludePaths.includes(config.config.url)) {
            //响应了错误
            ElMessageBox.alert(config.data.msg, '错误提示', { type: 'error' })
        }


        //判断登录失效的情况 10022 1004（token失效了）前后端约定俗成的状态码 并不是http状态码
        if (config.data.code == '10022' || config.data.code == "1004") {
            //退到登入页，然后清掉token
            sessionStorage.removeItem('my-token')
            router.push('/login')
            //刷新页面，清掉缓存
            location.reload()

        }



        return Promise.reject(config.data.msg)
    }

})


export default http;